![]() |
![]() |
|
rtk 20162016.1.1 (popravi)Tipkanje 1. podnalogaZnašel si se v vlogi zapisnikarja, ki mora na računalniku vnesti seznam n
besed. To počneš tako, da s pritiski na tipkovnico vnašaš črko po črko v vnosno
polje, ki je na začetku prazno. Ko je v polju izpisana zahtevana beseda,
zaključiš vnos s pritiskom na tipko NalogaPopravi program, da bo izpisal, najmanj koliko pritiskov tipk boš potreboval, da vneseš podane besede. Program naj vhodne podatke bere s standardnega vhoda.
Vhodni podatkiV prvi vrstici je število besed, nato pa sledi ustrezno število vrstic,
v vsaki od njih je po ena beseda. Predpostaviš lahko, da besede vsebujejo
le male črke angleške abecede, vendar to ni ključnega pomena.
Posamezna beseda je dolga največ Izhodni podatkiIzpis števila potrebnih pritiskov tipk, da vnesemo podane besede. PrimerPrimer vhoda:
Pripadajoči izhod:
Uradna rešitevstevilo_besed = int(input()) prejsnja_beseda, beseda = '', '' vnosi = 0 for i in range(stevilo_besed): beseda = input() dolzina_besede = len(beseda) dolzina_prejsnje = len(prejsnja_beseda) # Pogledamo, v koliko znakih se za beseda ujema s prejšnjo ujemanje = 0 while ( ujemanje < min(dolzina_prejsnje, dolzina_besede) ) and ( prejsnja_beseda[ujemanje] == beseda[ujemanje]): ujemanje += 1 backspace = dolzina_prejsnje - ujemanje novi_vnosi = dolzina_besede - ujemanje vnosi += backspace + novi_vnosi + 1 # 1 za Enter prejsnja_beseda = beseda print(vnosi) 2016.1.2 (popravi)Zoom 1. podnalogaNa računalniku gledamo zemljevid, ki pokriva v koordinatnem sistemu območje
Primer za niz " Začnemo z območjem v obliki pravokotnika, ki ga določata točki Sedaj je naše območje pravokotnik, določen s točkama Sedaj je naše območje pravokotnik, določen s točkama Upoštevali smo celoten niz in približali do območja v obliki pravokotnika,
določenega s koordinatami NalogaNapisana je funkcija
Vhodni podatkiNiz, sestavljen iz nizov '0', '1', '2', '3' ter koordinate območja tipa float.
Izhodni podatkiKoordinate območja tipa float, ki ga gledamo po zadnjem koraku približevanja. Primer
Uradna rešitevdef zoom(s, x1, y1, x2, y2): """Za dani niz s, ki opisuje potek približevanja, in koordinate celotnega zemljevida x1, y1, x2, y2 izračuna in vrne koordinate tistega območja, ki ga gledamo po zadnjem koraku približevanja.""" for znak in s: x = (x1 + x2) / 2 y = (y1 + y2) / 2 if znak == '0' or znak == '1': y1 = y else: y2 = y if znak == '0' or znak == '2': x2 = x else: x1 = x return x1, y1, x2, y2 2016.1.3 (popravi)Zaklepajski izrazi 1. podnalogaOklepajski izrazi so nizi, ki jih sestavljajo sami oklepaji in zaklepaji, morajo pa biti pravilno gnezdeni. Oklepaji in zaklepaji so lahko različnih oblik:
Pravilno gnezdeni pomeni, da mora imeti vsak oklepaj tudi pripadajoč zaklepaj enake oblike (in obratno), podniz med njima pa mora biti tudi sam zase oklepajski izraz. Primeri oklepajskih izrazov: <<>>, ()<>(), {[{}()]<>}. Primeri nizov, ki niso oklepajski izrazi: (()(, ([)], <>><<>. NalogaDan je nek niz Napisana je funkcija
Vhodni podatkiNiz, v katerem se pojavljajo le zaklepaji različnih oblik in zvezdice. Izhodni podatkiFunkcija naj vrne popravljeni niz. Če se izkaže, da niza ni mogoče ustrezno popraviti, da bi nastal oklepajski izraz, naj vrne niz "Problem je nerešljiv." PrimerIz " Iz " Uradna rešitevdef dopolni(s): """Če je mogoče, vrne popravljen niz, da predstavlja oklepajski izraz. Če ni mogoče, vrne niz 'Problem je nerešljiv.'.""" # Niz beremo od konca proti začetku n = len(s) # V pythonu nizu ne moremo kar spremeniti znaka. Zato si niz napišemo v seznam. izraz = list(s) sklad = '' velikost_sklada = len(sklad) for i in range(n-1, -1, -1): if s[i] != '*': sklad += s[i] velikost_sklada += 1 # sicer imamo zvezdico else: # Pobrišemo zaklepaj z vrha sklada in spremenimo trenutno zvezdico v pripadajoči oklepaj. if velikost_sklada == 0: return "Problem je nerešljiv." zaklepaj = sklad[-1] sklad = sklad[0:velikost_sklada - 1:] velikost_sklada -= 1 if zaklepaj == ')': izraz[i] = '(' elif zaklepaj == ']': izraz[i] = '[' elif zaklepaj == '}': izraz[i] = '{' elif zaklepaj == '>': izraz[i] = '<' if velikost_sklada == 0: return ''.join(izraz) else: return "Problem je nerešljiv." 2016.1.3 (razlicica popravi)Zaklepajski izrazi 1. podnalogaOklepajski izrazi so nizi, ki jih sestavljajo sami oklepaji in zaklepaji, morajo pa biti pravilno gnezdeni. Oklepaji in zaklepaji so lahko različnih oblik:
Pravilno gnezdeni pomeni, da mora imeti vsak oklepaj tudi pripadajoč zaklepaj enake oblike (in obratno), podniz med njima pa mora biti tudi sam zase oklepajski izraz. Primeri oklepajskih izrazov: <<>>, ()<>(), {[{}()]<>}. Primeri nizov, ki niso oklepajski izrazi: (()(, ([)], <>><<>. NalogaDan je nek niz Napisana je funkcija
Vhodni podatkiNiz, v katerem se pojavljajo le zaklepaji različnih oblik in zvezdice. Izhodni podatkiFunkcija naj vrne popravljeni niz. Če se izkaže, da niza ni mogoče ustrezno popraviti, da bi nastal oklepajski izraz, naj vrne niz "Problem je nerešljiv." PrimerIz " Iz " Uradna rešitevdef dopolni(s): """Če je mogoče, vrne popravljen niz, da predstavlja oklepajski izraz. Če ni mogoče, vrne niz 'Problem je nerešljiv.'.""" # Niz beremo od konca proti začetku n = len(s) # V pythonu nizu ne moremo kar spremeniti znaka. Zato si niz napišemo v seznam. izraz = list(s) sklad = '' velikost_sklada = len(sklad) for i in range(n-1, -1, -1): if s[i] != '*': sklad += s[i] velikost_sklada = len(sklad) # sicer imamo zvezdico else: # Pobrišemo zaklepaj z vrha sklada in spremenimo trenutno zvezdico v pripadajoči oklepaj. if velikost_sklada == 0: return "Problem je nerešljiv." zaklepaj = sklad[-1] sklad = sklad[0:velikost_sklada - 1:] velikost_sklada -= 1 if zaklepaj == ')': izraz[i] = '(' elif zaklepaj == ']': izraz[i] = '[' elif zaklepaj == '}': izraz[i] = '{' elif zaklepaj == '>': izraz[i] = '<' if velikost_sklada == 0: return ''.join(izraz) else: return "Problem je nerešljiv." 2016.1.4 (popravi)Izštevanka 1. podnalogaOtroci so se že malo naveličali vsakokrat uporabljati preprosto izštevanko "An ban pet podgan" za določitev tistega, ki lovi, zato so se odločili za manjšo spremembo: vsak naj ima dve življenji, kdor ostane brez, je "izbrani". V krog se postavi NalogaNapisan je program, ki prebere dve pozitivni celi števili -
Vhodni podatkiDve pozitivni celi števili, prvo predstavlja število otrok, drugo pa dolžino izštevanke. Izhodni podatkiProgram izpiše število "izbranega" otroka. PrimerČe imamo
Uradna rešitevn = int(input()) k = int(input()) zivljenja = [] for i in range(n): zivljenja.append(2) i = 0 while zivljenja[i] > 0: i = (i + k) % n zivljenja[i] -= 1 k += 1 print(i+1) 2016.1.5 (popravi)H-indeks 1. podnalogaHirschev indeks (krajše tudi h-indeks) je ena izmed številnih ocen, ki poskušajo meriti uspešnost raziskovalcev. Cilj ocene h-indeks je uravnotežiti produktivnost (število objavljenih člankov)
in vplivnost (citiranost njegovih člankov) posameznega raziskovalca.
H-indeks je definiran kot največje celo število NalogaPopravi funkcijo
Vhodni podatkiDani seznam je sestavljen iz števil, ki za posamezne članke povedo, kolikokrat so bili citirani. Izhodni podatkiFunkcija vrne h-indeks za podani seznam. PrimerČe imamo seznam Uradna rešitevdef h_indeks(clanki): """Izračuna h-indeks iz danega seznama citiranosti člankov.""" st_clankov = len(clanki) stevec = [0] * st_clankov for clanek in clanki: if clanek >= st_clankov: stevec[st_clankov - 1] += 1 else: stevec[clanek] += 1 s = 0 h = st_clankov if 1 <= h <= stevec[h-1]: return h while h > s: h -= 1 s += stevec[h] return h 2016.1.5 (razlicica popravi)H-indeks 1. podnalogaHirschev indeks (krajše tudi h-indeks) je ena izmed številnih ocen, ki poskušajo meriti uspešnost raziskovalcev. Cilj ocene h-indeks je uravnotežiti produktivnost
(število objavljenih člankov) in vplivnost (citiranost njegovih člankov)
posameznega raziskovalca. H-indeks je definiran kot največje celo število NalogaPopravi funkcijo
Vhodni podatkiDani seznam je sestavljen iz števil, ki za posamezne članke povedo, kolikokrat so bili citirani. Izhodni podatkiFunkcija vrne h-indeks za podani seznam. PrimerČe imamo seznam Uradna rešitevdef h_indeks(clanki): """Izračuna h-indeks iz danega seznama citiranosti člankov.""" st_clankov = len(clanki) stevec = [0] * st_clankov for clanek in clanki: if clanek >= st_clankov: stevec[st_clankov - 1] += 1 else: stevec[clanek] += 1 s = 0 h = st_clankov if 1 <= h <= stevec[h-1]: return h while h > s: h -= 1 s += stevec[h] return hMesto objave ob koncu projekta 15.9.2018 |